<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>

        // 函数的参数是基本数据类型时，传入的是值，函数内部的形参的改变，不会影响外面的变量

        // 函数的参数是引用数据类型时，传入的是地址，函数内部的形参的改变，也会影响外面的变量





        // 
        // var a = 1 ;

        function fn(a) {   // a是形参，形参的本质是局部变量
            // var a ;
            // a = a = 1 ;
            a++ ;   // 优先使用自己的变量 a
        }

        // fn(a) ;

        // console.log(a) ;   // 1   不会收到影响



        var b = 1 ;

        fn(b) ;

        console.log(b) ;  // 



        var a = 1 ;

        fn(a) ;

        function fn(a) {
            a++ ;
        }

        console.log(a) ;  // 1


        // 外面声明了变量a = 1
        // 调用函数  fn(a)   实际上是把a的值传入函数 ，也就是说  fn(1) 

        // function fn(a) {
        //     a++ ;
        // }

        // 函数的执行过程   相当于var a  
        // 调用函数之后，实参被传入， 被a接受   a = 1 ;
        // 函数自己的变量  a在自增     跟外面的全局变量a没有关系







        
        function ff(arr) {
            arr.pop() ;
        }

        var arr2 = [1,2,3] ;

        ff(arr2) ;

        console.log(arr2);


        // 调用函数时，ff(arr2)   相当于把arr2存的值传入函数   arr2存的值实际上是一个地址  

        function ff(arr) {
            arr.pop();
        }

        // 相当于  var arr ;
        // 调用函数时  arr = arr2的地址    arr和arr2共享了地址








    </script>
    
</body>
</html>